/*
 * Index.java
 *
 * Created on 28 de marzo de 2007, 13:00
 */

package controladorfrontal.pagina;
import excepciones.AvwException;

import gestores.pagina.GestorCliente;
import gestores.pagina.GestorPrincipal;


import java.util.HashMap;


import util.Recurso;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

/**
 *
 * @author Administrador
 * @version
 */
public class Index extends HttpServlet {
    
    private HttpSession session = null;
    private String mswCodigo;
    
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        PrintWriter out = response.getWriter();

        /* TODO output your page here */
           
        HashMap microCampania = null;
        RequestDispatcher dispatcher = null;
        String accion = null;
        Recurso recurso;
        String microSitioPorDefecto;
        
        // Obtenemos codigo de micrositio por defecto
        try{
            recurso = new Recurso("negocio.properties");
            microSitioPorDefecto = recurso.obtenerPropiedad(
                "micrositioPorDefecto");
        }catch(Exception e){
            request.setAttribute("error", 
                                 e.getMessage());
            dispatcher = 
                    request.getRequestDispatcher("/vistas/pagina/error.jsp");
            dispatcher.forward(request, response);
            return;
        }
        
        // Comienza a contabilizar el tiempo de respuesta de la pagina
        request.setAttribute("inicio",System.currentTimeMillis());
        
        // Se obtiene la variable de sesion
        session = request.getSession(true);
        
        //Verrifica y setea variables de session de campania.
        verificarSession(request, microSitioPorDefecto);
        
        // Verificamos si el usuario inicia sesion
        if (request.getParameter("_login") != null){
            this.login(request, response);
        }
        
        // Verificamos si el usuario cierra sesion
        if (request.getParameter("_unlogin") != null){
            this.unlogin(request, response);
        }
        
        // Verificamos si existe alguna advertencia
        if (request.getParameter("_msg_advertencia") != null){
            request.setAttribute("_msg_advertencia", 
                    request.getParameter("_msg_advertencia"));
        }
        
        //Veo q accion se debe ejecutar
        accion = request.getParameter("accion");
        if (accion == null) {
            dispatcher = 
                    request.getRequestDispatcher("/despachador/pagina/principal");
        }else {
            dispatcher = 
                    request.getRequestDispatcher("/despachador/pagina/" + accion);
        } 


        try {
            //Seteo el codigo del micrositio
            request.setAttribute("codMicro",
                                 (String)session.getAttribute("micro"));
            //Seteo el micrositio en session
            microCampania = (HashMap)session.getAttribute("microCampania");
            // Cargamos los atributos necesarios
            request.setAttribute("nomMicro", 
                                 (String)microCampania.get("nombre_micrositio"));
            request.setAttribute("telMicro",
                                 (String)microCampania.get("telefono_micrositio"));
             request.setAttribute("codCampania", 
                                 (String)microCampania.get("codigo_campania"));
        }catch (Exception e) {
            response.sendRedirect("./index?micro=" + microSitioPorDefecto);
            return;
        }

        // Reenvia la peticion
        dispatcher.forward(request, response);
         
    }
    
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    
    
    
     /**
     * Valida el usuario entrante, y setea en sesion el cliCodigo, cliNombre, cliEmail
     */
    private void login(HttpServletRequest request, 
                       HttpServletResponse response) {

        HashMap hashMap = null;
        String email;
        String contrasenia;
 
        try {
            email = request.getParameter("_email");
            contrasenia = request.getParameter("_contrasenia");
            hashMap = GestorCliente.iniciarSesion(email, contrasenia);
            //Crear sesion.
            session.setAttribute("cliEmail", email);
            session.setAttribute("cliCodigo", hashMap.get("cliCodigo"));
            session.setAttribute("cliNombre", hashMap.get("cliNombre"));

        } catch (AvwException ex) {
            request.setAttribute("error", 
                                 ex.getMensaje());
            request.setAttribute("msgsesion", "Usuario inexistente.");
        } catch (Exception e) {
            request.setAttribute("error", 
                                 e.getMessage());
            
        }

    }
    
        /**
     * Cierra la sesion del usuario
     * @param request
     * @param response
     */
    private void unlogin(HttpServletRequest request, 
                       HttpServletResponse response) {
        session.removeAttribute("cliEmail");
        session.removeAttribute("cliCodigo");
        session.removeAttribute("cliNombre");
    }
    
     /**
     * Verifica las variables de sesion, seteando el mswCodigo a utilizar en el post.
     *
     */

    private void verificarSession(HttpServletRequest request, String micro) {
        HashMap microCampania; //contiene los datos de la campania.

        //Obtengo el micrositio 
        if (request.getParameter("micro") != null) {
            mswCodigo = request.getParameter("micro");
            microCampania = 
                    GestorPrincipal.obtenerMicrositioYCampania(mswCodigo);
        } else if (session.getAttribute("micro") != null) {
            mswCodigo = (String)session.getAttribute("micro");
            microCampania = (HashMap)session.getAttribute("microCampania");
        } else {
            mswCodigo = micro;
            microCampania = 
                    GestorPrincipal.obtenerMicrositioYCampania(mswCodigo);
        }

        //Seteo el codigo de micrositio en sesion
        session.setAttribute("micro", mswCodigo);
        //Seteo el micrositio en session
        session.setAttribute("microCampania", microCampania);
    }
    
    // </editor-fold>
}
